package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Tabta002
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Tabta002 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Tabta002.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String horaCorrente;
	private int matfun;
	private String senfun;
	private String nomfun;
	private String senhaA;
	private int grupel;
	private int vwDvetabDintabDatatu;
	private int matatu;
	private String situa;
	private String empresa;
	private String nomeClasse;
	private String[][] mod1 = new String[4][9];
	private String[][] mod2 = new String[4][9];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "mod1[j][i]";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;

	// Classes views
	// Classes includes
	public Tabta002() {
		inicializar(false);
	}

	public Tabta002(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			matfun = 0;
			senfun = "";
			nomfun = "";
			senhaA = "";
			grupel = 0;
			UtilBean.fill(mod1, "");
			UtilBean.fill(mod2, "");
			vwDvetabDintabDatatu = 0;
			matatu = 0;
			situa = "";
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) throws Exception {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() throws Exception {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarGrupel();
		if (temMensagem) {
			return false;
		}
		ValidarMod1();
		if (temMensagem) {
			return false;
		}
		ValidarMod2();
		if (temMensagem) {
			return false;
		}
		ValidarNomfun();
		if (temMensagem) {
			return false;
		}
		ValidarSenfun();
		if (temMensagem) {
			return false;
		}
		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!(UtilBean.funcao.equals(UtilBean.ctt_processa) || UtilBean.funcao.equals(UtilBean.ctt_confirma) || UtilBean.funcao.equals(UtilBean.ctt_retorna) || UtilBean.funcao.equals(UtilBean.ctt_proxima))) {
			enviarMensagem(null, "");
			return;
		}
	}

	private void ValidarSenfun() throws Exception {
		// Consist�ncia F00SENFUN
		String sen1 = "";
		String sen2 = "";
		String titul = "";
		String mens = "";
		if (operacao.equals("ATS"))
		// IF & NE SENHA-A && funcao NE UtilBean.ctt_proxima)
		// REINPUT "TECLE PF8 PARA ALTERAR A SENHA" MARK *& ALARM
		{
			if (UtilBean.funcao.equals(UtilBean.ctt_proxima))
			// END-IF
			{
				// Par�grafo: r1()
				// Repeat
				titul = "NOVA SENHA";
				// INPUT 212
				if (!getEnviada()) {
					enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					receberTela(false, result);
				}
				if (sen1.trim().equals("")) {
					enviarMensagem(null, "");
					return;
				}
				titul = " REDIGITE ";
				// INPUT 218
				if (!getEnviada()) {
					enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					receberTela(false, result);
				}
				if (sen1.trim().equals("")) {
					enviarMensagem(null, "");
					return;
				}
				if (!sen1.equals(sen2)) {
					setMensagemSaida("NOVA SENHA NAO CONFERE, INFORME NOVAMENTE");
					sen1 = "";
					sen2 = "";
				} else {
					;
				}
				senfun = sen1;
				// INPUT 232
				if (!getEnviada()) {
					enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					receberTela(false, result);
				}
			}
		}
	}

	private void ValidarNomfun() {
		// Consist�ncia F00NOMFUN
		if (nomfun.trim().equals("") && operacao.equals("ATS")) {
			enviarMensagem(null, "INFORME O NOME DO FUNCIONARIO");
			return;
		}
	}

	private void ValidarGrupel() {
		// Consist�ncia F00GRUPEL
		// ALTERADO PARA JSP
		// if (grupel == 0 && operacao.equals("ATS")) {
		// // INPUT 248
		// tabta002.enviarReceberTela(false, result);
		// if (grupel == 0) {
		// enviarMensagem(null, "INFORME O ORGAO DO FUNCIONARIO");
		// return;
		// }
		// // INPUT 265
		// tabta002.receberTela(false, result);
		// }
	}

	private void ValidarMod1() throws Exception {
		// Consist�ncia F00MOD1
		int i;
		int j;
		if (operacao.equals("ATS")) {
			for (i = 1; i <= 7; i++) {
				for (j = 1; j <= 3; j++) {
					if (!UtilBean.validarMascara(getMod1(j, i), "0-1")) {
						enviarMensagem(null, "INFORME �0� ou �1�");
						return;
					}
				}
			}
		}
	}

	private void ValidarMod2() throws Exception {
		// Consist�ncia F00MOD2
		int i;
		int j;
		if (operacao.equals("ATS")) {
			for (i = 1; i <= 7; i++) {
				for (j = 1; j <= 3; j++) {
					if (!UtilBean.validarMascara(getMod2(j, i), "0-1")) {
						enviarMensagem(null, "INFORME �0� OU �1�");
						return;
					}
				}
			}
		}
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public int getMatfun() {
		return matfun;
	}

	public void setMatfun(int matfun) {
		this.matfun = matfun;
	}

	public String getSenfun() {
		return senfun;
	}

	public void setSenfun(String senfun) {
		this.senfun = senfun;
	}

	public String getNomfun() {
		return nomfun;
	}

	public void setNomfun(String nomfun) {
		this.nomfun = nomfun;
	}

	public String getSenhaa() {
		return senhaA;
	}

	public void setSenhaa(String senhaA) {
		this.senhaA = senhaA;
	}

	public int getGrupel() {
		return grupel;
	}

	public void setGrupel(int grupel) {
		this.grupel = grupel;
	}

	public int getVwdvetabdintabdatatu() {
		return vwDvetabDintabDatatu;
	}

	public void setVwdvetabdintabdatatu(int vwDvetabDintabDatatu) {
		this.vwDvetabDintabDatatu = vwDvetabDintabDatatu;
	}

	public int getMatatu() {
		return matatu;
	}

	public void setMatatu(int matatu) {
		this.matatu = matatu;
	}

	public String getSitua() {
		return situa;
	}

	public void setSitua(String situa) {
		this.situa = situa;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public String[][] getMod1() {
		return mod1;
	}

	public void setMod1(String[][] mod1) {
		this.mod1 = mod1;
	}

	public String[][] getMod2() {
		return mod2;
	}

	public void setMod2(String[][] mod2) {
		this.mod2 = mod2;
	}

	public String getMod1(int index1, int index2) {
		return mod1[index1][index2];
	}

	public void setMod1(int index1, int index2, String mod1) {
		this.mod1[index1][index2] = mod1;
	}

	public String getMod2(int index1, int index2) {
		return mod2[index1][index2];
	}

	public void setMod2(int index1, int index2, String mod2) {
		this.mod2[index1][index2] = mod2;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
